# 定义编译器和编译选项
CC = gcc
CFLAGS = -Wall -O2 -ggdb

# 定义输出的目标文件
TARGETS = hashtable webserver_cached

# 源文件
HASHTABLE_SRC = hashtable.c Cache.c testcache.c
WEBSERVER_CACHED_SRC = webserver_cached.c thpool.c hashtable.c Cache.c



# 目标文件
HASHTABLE_OBJ = $(HASHTABLE_SRC:.c=.o)
WEBSERVER_CACHED_OBJ = $(WEBSERVER_CACHED_SRC:.c=.o)



# 编译生成目标文件
all: $(TARGETS)

# 生成 webserver_fork
hashtable: $(HASHTABLE_OBJ)
	$(CC) -DHASHTHREAD $(CFLAGS) -o $@ $^  -lpthread

# 生成 webserver_cached
webserver_cached: $(WEBSERVER_CACHED_OBJ)
	$(CC) $(CFLAGS) -o $@ $^  -lpthread

# 生成 .o 文件的规则
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

# 清理编译生成的文件
clean:
	rm -f $(TARGETS) $(HASHTABLE_OBJ) \
	$(WEBSERVER_CACHED_OBJ)

# 重新编译
rebuild: clean all

.PHONY: all clean rebuild
